home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 076-100 / 078 / mandelvroom / menu.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  7KB  |  339 lines

  1. /***************************************************************************
  2.  *
  3.  *                 MandelVroom Menu Manipulation routines
  4.  *
  5.  *                         Kevin L. Clague
  6.  *
  7.  *                        Copyright (C) 1987
  8.  *
  9.  **************************************************************************/
  10.  
  11. #include "mand.h"
  12.  
  13. extern struct Menu Menu, GenMenu;
  14.  
  15. extern struct NewScreen NewScreen;
  16. extern struct Screen *screen;
  17. extern struct Window *MandWind, *PalWind, *ContWind;
  18. extern struct NewWindow *NewMand;
  19.  
  20. extern SHORT MaxCount, Zoom;
  21. extern UBYTE MandType, QuitScreen;
  22. extern USHORT CmdMode;
  23.  
  24. /*
  25.  * Decide what to do for Project menu's Items
  26.  */
  27. ScreenProject(code)
  28.   USHORT code;
  29. {
  30.   static char File[80] = "", Path[80] = "df1:";
  31.   char Name[160];
  32.   char *p;
  33.  
  34.   switch (ITEMNUM(code))
  35.     {
  36.     case LOADITEM:
  37.  
  38.          SetSystemColors(1);
  39.  
  40.          if (get_fname(MandWind,screen,"Load Pics",File,Path)) {
  41.  
  42.            SetSystemColors(0);
  43.  
  44.            strcpy(Name,Path);
  45.            if (Name[strlen(Name)-1] != ':') {
  46.              strcat(Name,"/");
  47.            }
  48.            strcat(Name,File);
  49.  
  50.            if (PalWind) {
  51.              ClosePalWind();
  52.            }
  53.            if (ContWind) {
  54.              CloseContWind();
  55.            }
  56.            ClearMenuStrip(MandWind);
  57.  
  58.            LoadCounts(Name);
  59.  
  60.            SetNormPointer();
  61.            SetMenuStrip(MandWind, &Menu);
  62.          } else {
  63.            SetSystemColors(0);
  64.          }
  65.  
  66.          break;
  67.  
  68.     case SAVEITEM:
  69.          switch (SUBNUM(code)) {
  70.            case 0:
  71.                 p = "Save Pics";
  72.                 break;
  73.            case 1:
  74.                 p = "Save ILBM";
  75.                 break;
  76.          }
  77.          SetSystemColors(1);
  78.  
  79.          if (get_fname(MandWind, screen, p, File, Path )) {
  80.  
  81.            SetSystemColors(0);
  82.  
  83.            strcpy(Name, Path);
  84.            if (Name[strlen(Name)-1] != ':') {
  85.              strcat(Name,"/");
  86.            }
  87.            strcat(Name,File);
  88.  
  89.            ClearMenuStrip(MandWind);
  90.  
  91.            switch (SUBNUM(code)) {
  92.              case 0:
  93.                   SaveCounts(Name);
  94.                   break;
  95.              case 1:
  96.                   SaveILBM(Name);
  97.                   break;
  98.            }
  99.            DisplayBeep(screen);
  100.  
  101.            SetNormPointer();
  102.  
  103.            SetMenuStrip(MandWind, &Menu);
  104.          } else {
  105.            SetSystemColors(0);
  106.          }
  107.          break;
  108.  
  109.     case GENERATEITEM:
  110.  
  111.          GenerateIt();
  112.  
  113.          break;
  114.  
  115.     case USEITEM:
  116.          CloseDisp();
  117.          OpenDisp();
  118.          break;
  119.  
  120.     case QUITITEM:
  121.          QuitScreen = TRUE;
  122.     }
  123. } /* DoProjectScreen */
  124.  
  125. /*
  126.  * Decide what to do for Edit menu's Items
  127.  */
  128. EditScreen(code)
  129.   USHORT code;
  130. {
  131.   float gapy,gapx;
  132.   extern LONG NavLeft,NavTop,NavBot,NavRight;
  133.  
  134.   switch (ITEMNUM(code))
  135.     {
  136.     case COLORITEM:
  137.          OpenPalWind();
  138.          break;
  139.  
  140.     case DEPTHITEM:
  141.          NewScreen.Depth = SUBNUM(code) + 1;
  142.          if (NewScreen.ViewModes & HIRES)
  143.            if (NewScreen.Depth > 4) {
  144.              NewScreen.Depth = 4;
  145.              InitDepthSubs();
  146.            }
  147.          break;
  148.  
  149.     case CONTOURITEM:
  150.          OpenContWind();
  151.          break;
  152.  
  153.     case VIEWMODEITEM:
  154.          EditScreenViewModes(code);
  155.          break;
  156.  
  157.     case GENERATORITEM:   /* generator type */
  158.          MandType = SUBNUM(code);
  159.          break;
  160.  
  161.     case ZOOMITEM:
  162.          switch (SUBNUM(code)) {
  163.            case ZOOMINON:
  164.              if (Zoom == 0) {
  165.                CmdMode = STARTBOX;
  166.                SetToPointer();
  167.              }
  168.              break;
  169.            case ZOOMINOFF:
  170.              if (Zoom == 1) {
  171.                DrawExtras(NavLeft, NavTop, NavRight, NavBot );
  172.                DrawBox(NavLeft, NavTop, NavRight, NavBot );
  173.                Zoom = 0;
  174.              }
  175.          }
  176.          break;
  177.  
  178.     case COUNTITEM:
  179.          switch (SUBNUM(code)) {
  180.            case 0:
  181.              MaxCount = 32;
  182.              break;
  183.            case 1:
  184.              MaxCount = 64;
  185.              break;
  186.            case 2:
  187.              MaxCount = 128;
  188.              break;
  189.            case 3:
  190.              MaxCount = 256;
  191.              break;
  192.            case 4:
  193.              MaxCount = 512;
  194.              break;
  195.            case 5:
  196.              MaxCount = 1023;
  197.              break;
  198.          }
  199.     }
  200. } /* EditScreen */
  201.  
  202. /*
  203.  * Modify the NewScreens ViewModes to match the menu
  204.  */
  205. EditScreenViewModes(code)
  206.   USHORT code;
  207. {
  208.   switch (SUBNUM(code))
  209.     {
  210.     case HIRESSUB:
  211.          if (NewScreen.ViewModes & HIRES) {
  212.             NewScreen.Width = 320;
  213.             NewScreen.ViewModes &= ~HIRES;
  214.          } else {
  215.             NewScreen.Width = 640;
  216.             NewScreen.ViewModes |= HIRES;
  217.             NewScreen.ViewModes &= ~EXTRA_HALFBRITE;
  218.             if (NewScreen.Depth > 4)
  219.               NewScreen.Depth = 4;
  220.          }
  221.          break;
  222.  
  223.     case INTERLACESUB:
  224.          if (NewScreen.ViewModes & INTERLACE) {
  225.             NewScreen.ViewModes &= ~INTERLACE;
  226.             NewScreen.Height = 200;
  227.          } else {
  228.             NewScreen.ViewModes |= INTERLACE;
  229.             NewScreen.Height = 400;
  230.          }
  231.          break;
  232.  
  233.     case HALFBRITESUB:
  234.          if (NewScreen.ViewModes & EXTRA_HALFBRITE) {
  235.             NewScreen.ViewModes &= ~EXTRA_HALFBRITE;
  236.             NewScreen.Depth = 5;
  237.          } else {
  238.             NewScreen.ViewModes |= EXTRA_HALFBRITE;
  239.             NewScreen.ViewModes &= ~HIRES;
  240.             NewScreen.Depth = 6;
  241.          }
  242.          break;
  243.     }
  244.  
  245.   InitViewModesSubs();
  246.   InitDepthSubs();
  247. } /* EditScreenViewMode */
  248.  
  249. /*
  250.  * Set up Menu's check marks to reflect viewmodes.
  251.  */
  252. InitViewModesSubs()
  253. {
  254.   SHORT i;
  255.   extern struct MenuItem ViewModeSubs[];
  256.  
  257.   for (i = HIRESSUB; i <= HALFBRITESUB; i++) {
  258.     ViewModeSubs[i].Flags &= ~CHECKED;
  259.     switch (i) {
  260.       case HIRESSUB:
  261.            if (NewScreen.ViewModes & HIRES)
  262.              ViewModeSubs[i].Flags |= CHECKED;
  263.            break;
  264.       case INTERLACESUB:
  265.            if (NewScreen.ViewModes & INTERLACE)
  266.              ViewModeSubs[i].Flags |= CHECKED;
  267.            break;
  268.       case HALFBRITESUB:
  269.            if (NewScreen.ViewModes & EXTRA_HALFBRITE)
  270.              ViewModeSubs[i].Flags |= CHECKED;
  271.            break;
  272.       }
  273.   }
  274. } /* InitViewModesSubs */
  275.  
  276. /*
  277.  * Set up Menu's check marks to reflect Depth.
  278.  */
  279. InitDepthSubs()
  280. {
  281.   SHORT i;
  282.   extern struct MenuItem DepthSubs[];
  283.  
  284.   for (i = 0; i <= 6; i++) {
  285.     DepthSubs[i].Flags &= ~CHECKED;
  286.   }
  287.   DepthSubs[NewScreen.Depth-1].Flags |= CHECKED;
  288.  
  289. } /* InitScreenViewMode */
  290.  
  291. /*
  292.  * Set up Menu's check marks to reflect Generator Type
  293.  */
  294. InitGenSubs()
  295. {
  296.   SHORT i;
  297.   extern struct MenuItem GenerateSubs[];
  298.   extern UBYTE MandType;
  299.  
  300.   for (i = 0; i <= 1; i++) {
  301.     GenerateSubs[i].Flags &= ~CHECKED;
  302.   }
  303.   GenerateSubs[MandType].Flags |= CHECKED;
  304.  
  305. } /* InitGenSubs */
  306.  
  307. /*
  308.  * Set up Menu's check marks to reflect Iteration count
  309.  */
  310. InitMaxISubs()
  311. {
  312.   SHORT i;
  313.   extern struct MenuItem CountSubs[];
  314.   extern SHORT MaxCount;
  315.  
  316.   for (i = 0; i <= 1; i++) {
  317.     CountSubs[i].Flags &= ~CHECKED;
  318.   }
  319.  
  320.   if (MaxCount <= 32)
  321.     CountSubs[0].Flags |= CHECKED;
  322.   else
  323.   if (MaxCount <= 64)
  324.     CountSubs[1].Flags |= CHECKED;
  325.   else
  326.   if (MaxCount <= 128)
  327.     CountSubs[2].Flags |= CHECKED;
  328.   else
  329.   if (MaxCount <= 256)
  330.     CountSubs[3].Flags |= CHECKED;
  331.   else
  332.   if (MaxCount <= 512)
  333.     CountSubs[4].Flags |= CHECKED;
  334.   else
  335.   if (MaxCount <= 1024)
  336.     CountSubs[5].Flags |= CHECKED;
  337.  
  338. } /* InitGenSubs */
  339.